了解崩潰傾印
一旦 NW.js 崩潰,磁碟上將會產生一個 minidump
檔案 (.dmp
)。使用者可以將其包含在錯誤報告中。您可以在崩潰時解碼 minidump
檔案以取得堆疊追蹤。因此,在某些情況下,這有助於找出 NW.js 出了什麼問題。
若要從 minidump
檔案中擷取堆疊追蹤,您需要三樣東西:從崩潰中產生的 minidump (.dmp
) 檔案、NW.js 二進位檔的符號檔案,以及 minidump_stackwalk
工具。
尋找 Minidump 檔案
當 NW.js 崩潰時,minidump 檔案將會產生在下列預設目錄中
- Linux:
~/.config/<name-in-manifest>/Crash\ Reports/
- Windows:
%LOCALAPPDATA%\<name-in-manifest>\User Data\CrashPad
(在 < 0.21.5 的版本中,由於錯誤 #5248,它位於%LOCALAPPDATA%\Chromium\User Data\CrashPad
) - Mac:
~/Library/Application\ Support/<name-in-manifest>/CrashPad/
<name-in-manifest>
是 清單檔案 的 name
欄位。
從 Linux Minidump 檔案中移除標頭
在 Linux 上產生的 Minidump 檔案具有額外的文字格式標頭。在解碼之前必須將它們移除。Minidump 檔案的實際內容以 MDMP
開頭,後跟無法讀取的二進位檔案。因此,只需刪除 MDMP
之前的文字即可。
整理符號檔案
已發佈的 NW.js 的符號檔案套件可以從 https://dl.nwjs.io/ 下載。
例如,在 Mac 上,使用 0.57.1
https://dl.nwjs.io/v0.57.1/nwjs-symbol-v0.57.1-osx-x64.zip
https://dl.nwjs.io/v0.57.1/nwjs-sdk-symbol-v0.57.1-osx-x64.zip
然後,您必須將符號檔案整理成 正確路徑和正確檔案名稱,以便 minidump_stackwalk
工具使用。minidump_stackwalk
使用 簡單的符號供應器 來尋找符號檔案。以下是它尋找符號檔案的方式。
該工具將嘗試按以下模式搜尋 .sym
(對於 Mac,將 .breakpad
變更為 .sym
)檔案
{SYMBOLS_ROOT}/{DEBUG_FILE_NAME}/{DEBUG_IDENTIFIER}/{DEBUG_FILE_NAME_WITHOUT_PDB}.sym
{SYMBOLS_ROOT}
是所有符號檔案的根資料夾。您可以將所有版本的 NW.sym
檔案和平台放在同一個資料夾中。{DEBUG_FILE_NAME}
、{DEBUG_IDENTIFIER}
和{DEBUG_FILE_NAME_WITHOUT_PDB}
可以從.sym
檔案的第一行取得,該行通常看起來像MODULE Linux x86_64 265BDB6BE043D5C70D3A1E279A8F0B1A0 nw
(對於 Mac,例如MODULE mac x86_64 4E7C70708AFD3C889F02B149AB5007080 nwjs
)。265BDB6BE043D5C70D3A1E279A8F0B1A0
是{DEBUG_IDENTIFIER}
nw
是{DEBUG_FILE_NAME}
。{DEBUG_FILE_NAME_WITHOUT_PDB}
可以透過移除僅在 Windows 中必要的.pdb
副檔名,從{DEBUG_FILE_NAME}
轉換而來。
例如,在 Mac 上,使用 0.57.1
-symbols_root/ -nwjs/ -4E7C70708AFD3C889F02B149AB5007080/ -nwjs.sym -nwjs Framework/ -87A9EA49BC473F4C8B7817631E820BEB0/ -nwjs Framework.sym -nwjs Helper/ -5598EA295F4F36FDA21CB9A5B11B11AA0/ -nwjs Helper.sym
使用 minidump_stackwalk
解碼迷你傾印檔
minidump_stackwalk
可以使用 NW.js 建置,或直接在 Mac 和 Linux 上從 breakpad 原始碼建置。或者,您可以在 Windows 上從 Cygwin 安裝預先建置的版本。
若要從 minidump
檔案取得堆疊追蹤,請執行下列指令
minidump_stackwalk minidump_file.dmp /path/to/symbols_root 2>&1
如果符號檔案未正確組織,您仍然可以使用此工具取得呼叫堆疊。但是,您將看不到符號,且輸出最後一節「載入的模組」中會出現警告,如下所示
0x00240000 - 0x02b29fff nw.exe ??? (main) (WARNING: No symbols, nw.exe.pdb, 669008F7B6EE44058CBD5F21BEB5B5CFe)
觸發崩潰以進行測試
若要測試崩潰傾印功能,您可以使用 NW.js 提供的 API App.crashBrowser()
和 App.crashRenderer()
故意觸發崩潰。它們分別會使瀏覽器程序和渲染程序崩潰。